package com.lifp.thread.collection;

import lombok.extern.slf4j.Slf4j;

import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @Description TODO
 * @Author lfp
 * @Date 2022/7/25
 * @Version 1.0
 */
@Slf4j
public class SetDemo {

    public static void main(String[] args) {
        //hashSetDemo();

        copyOnWriteArraySetDemo();
    }


    /**
    * 【HashSet 线程不安全类】，会发生并发修改异常
    */
    public static void hashSetDemo(){
        //创建HashSet集合
        Set<String> set = new HashSet<>();

        //循环创建多个线程去操作该集合
        for (int i = 0; i < 30; i++) {
            new Thread(()->{
                set.add(UUID.randomUUID().toString().substring(0,8));
                //从集合中获取内容
                System.out.println(set);
            },String.valueOf(i)).start();
        }
    }


    /**
     * 【CopyOnWriteArraySet 线程安全类】
     */
    public static void copyOnWriteArraySetDemo(){
        //创建HashSet集合
        Set<String> set = new CopyOnWriteArraySet<>();

        //循环创建多个线程去操作该集合
        for (int i = 0; i < 30; i++) {
            new Thread(()->{
                set.add(UUID.randomUUID().toString().substring(0,8));
                //从集合中获取内容
                System.out.println(set);
            },String.valueOf(i)).start();
        }
    }

}
